#include "utest.h"
#ifdef PKG_USING_GCOV
#include "gcov_public.h"
#endif
#include "bubble_sort.h"

// 这是冒泡算法的测试用例1
static void test_bubble_sort1(void){
    // 定义等待被排序的数组
    int arr [] ={5,3,1,4,2};
    // 调用冒泡排序算法
    bubble_sort(arr, 5);
    // 使用utest断言
    for (int i = 0; i< 5; i++){
        uassert_int_equal(arr[i], i+1);
    }
}

// 这是冒泡算法的测试用例2
static void test_bubble_sort2(void){
    // 定义等待被排序的数组
    int arr [] = {3,1,2};
    // 调用冒泡排序算法
    bubble_sort(arr, 3);
    // 使用utest断言
    for (int i = 0; i< 3; i++){
        uassert_int_equal(arr[i], i+1);
    }
}

// utest测试的初始化程序，一般是用来准备资源
static rt_err_t utest_tc_init(void)
{
    return RT_EOK;
}

// utest测试的结束程序，一般是用来释放资源
static rt_err_t utest_tc_cleanup(void)
{
    // 我们在测试用例结束之前，将覆盖率结果输出来
    #ifdef PKG_USING_GCOV
    __gcov_exit();
    #endif
    return RT_EOK;
}

// 将所有测试用例放在一个套件里面调用
static void utest_tc_cases(void)
{
    UTEST_UNIT_RUN(test_bubble_sort1);
    UTEST_UNIT_RUN(test_bubble_sort2);

}
// 导出测试用例套件，之后可以通过MSH命令行运行
UTEST_TC_EXPORT(utest_tc_cases, "bubble_sort", utest_tc_init, utest_tc_cleanup, 10);